﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SCFHS.Data;

namespace SCFHS.Views.SystemDefinitions
{
    public partial class UserManagement : SysBase
    {

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnSearchUser_Click(object sender, EventArgs e)
        {
            List<Data.User> users = controller.GetUserByName(txtUserNameToSearh.Text);
            if (users == null || users.Count < 1)
            {
                mView.ActiveViewIndex = 0;
                lblMessage.Text = "لا يوجد نتائج للبحث المدخل";
                lblMessage.CssClass = "error";
                return;
            }
            else
            {
                FillUserData(users);
            }

        }

        protected void btnUpdateMainUserInfo_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(hdfUserID.Value))
                return;
            bool result = controller.UpdateUserMainInfo(int.Parse(hdfUserID.Value), txtUserName.Text, txtDefaultPage.Text, txtProfileName.Text, ckbxIsAdmin.Checked, ckbxIsActive.Checked, GetUserRole(ckbxIsAdmin, ckbxRoles));
            if (!result)
            {
                lblMessage.Text = "عفوا حدث خطأ ولم يتم تحديث بيانات المستخدم";
                lblMessage.CssClass = "error";
                return;
            }

            lblMessage.Text = "لقد تم تحديث بيانات المستخدم بنجاح";
            lblMessage.CssClass = "info";

        }

        protected void btnUpdatePassword_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(hdfUserID.Value))
                return;
            bool result = controller.UpdateUserPassword(int.Parse(hdfUserID.Value), txtNewPassword.Text);
            if (!result)
            {
                lblMessage.Text = "عفوا حدث خطأ ولم يتم تحديث الرقم السري للمستخدم";
                lblMessage.CssClass = "error";
                return;
            }

            lblMessage.Text = "لقد تم تحديث الرقم السري للمستخدم بنجاح";
            lblMessage.CssClass = "info";
        }



        #region Helper Method
        void FillUserData(List<User> users)
        {
            lblMessage.Text = "";
            if (users.Count == 1)
            {
                dvUsersResult.Visible = false;
                Data.User resultUser = users.ElementAt(0);
                mView.ActiveViewIndex = 1;
                hdfUserID.Value = resultUser.userID.ToString();
                txtUserName.Text = resultUser.userName;
                txtProfileName.Text = resultUser.userProfileName;
                txtDefaultPage.Text = resultUser.userDefaultPage;
                ckbxIsAdmin.Checked = resultUser.isAdmin;
                if (resultUser.isAdmin)
                {
                    foreach (ListItem ckitem in ckbxRoles.Items)
                        ckitem.Selected = true;
                }
                else
                {
                    foreach (string roleVal in resultUser.userRole.Split('/'))
                    {
                        if (string.IsNullOrEmpty(roleVal))
                            continue;
                        ListItem roleItem = ckbxRoles.Items.FindByValue(roleVal);
                        roleItem.Selected = true;
                    }
                }

                ckbxIsActive.Checked = resultUser.isActive;
            }
            else
            {
                dvUsersResult.Visible = true;
                Session.Remove("users");
                Session.Add("users", users);
                grdUsers.DataSource = users;
                grdUsers.DataBind();
            }
        }

        string GetUserRole(CheckBox ckbxisAdmin, CheckBoxList ckbxRoles)
        {
            string userRole = string.Empty;
            if (ckbxisAdmin.Checked)
                userRole = ((int)Code.UserRoles.All).ToString();
            else
                foreach (ListItem roleItem in ckbxRoles.Items)
                {
                    if (roleItem.Selected)
                    {
                        if (string.IsNullOrEmpty(userRole))
                            userRole = roleItem.Value;
                        else
                            userRole = userRole + "/" + roleItem.Value;
                    }
                }
            return userRole;
        }

        #endregion

        #region DataMethod
        void GetUserData()
        { }
        #endregion

        protected void btnAddNewUser_Click(object sender, EventArgs e)
        {
            mView.SetActiveView(vNewUser);
        }

        protected void btnSubmitNewUserInfo_Click(object sender, EventArgs e)
        {
            bool result = controller.CreateNewUser(txtNewUserName.Text, txtNewUserPassword.Text, txtNewUserDefaultPage.Text, txtNewUserProfileName.Text, ckbxNewUserIsAdmin.Checked, ckbxNewUserIsActive.Checked, GetUserRole(ckbxNewUserIsAdmin, ckbxNewUserRoles));
            if (!result)
            {
                lblMessage.Text = "عفوا حدث خطأ ولم يتم إضافة المستخدم";
                lblMessage.CssClass = "error";
                return;
            }

            lblMessage.Text = "لقد تم إضافة المستخدم بنجاح";
            lblMessage.CssClass = "info";
            mView.ActiveViewIndex = 0;
        }

        protected void grdUsers_SelectedIndexChanged(object sender, EventArgs e)
        {
            GridViewRow grRow = grdUsers.SelectedRow;
            if (Session["users"] != null)
            {
                List<User> users = Session["users"] as List<User>;
                string SelectedUserId = ((Label)grRow.FindControl("lblUserID")).Text;
                var SelectedUser = users.Where(usr => usr.userID.ToString() == SelectedUserId);
                users = SelectedUser.ToList<Data.User>();
                FillUserData(users);
            }
            else
            {
                if (string.IsNullOrEmpty(txtUserNameToSearh.Text))
                    return;
                List<Data.User> users = controller.GetUserByName(txtUserNameToSearh.Text);
                if (users == null || users.Count < 1)
                {
                    lblMessage.Text = "عفوا حدث خطأ يرجي البحث مرة اخري";
                    lblMessage.CssClass = "error";
                    return;
                }
                else
                {
                    FillUserData(users);
                }
            }
        }

        protected void btnDeleteUser_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(hdfUserID.Value))
                return;
            try
            {
                bool result = controller.DeleteUser(int.Parse(hdfUserID.Value));
                if (!result)
                {
                    lblMessage.Text = "عفوا حدث خطأ ولم يتم حذف بيانات المستخدم";
                    lblMessage.CssClass = "error";
                    return;
                }

                lblMessage.Text = "لقد تم حذف بيانات المستخدم بنجاح";
                lblMessage.CssClass = "info";
                mView.ActiveViewIndex = 0;

            }
            catch (Exception)
            {
                
                throw;
            }
        }
    }
}

